package com.hiwhitley.easy.day09;

/**
 * Created by hiwhitley on 2016/8/13.
 */


/*羅馬數字共有7個，即I（1）、V（5）、X（10）、L（50）、C（100）、D（500）和M（1000）。按照下述的規則可以表示任意正整數。需要注意的是罗马数字中没有“0”，與進位制無關。一般認為羅馬數字只用來記數，而不作演算。
        重複數次：一個羅馬數字重複幾次，就表示這個數的幾倍。
        右加左減：
        在較大的羅馬數字的右邊記上較小的羅馬數字，表示大數字加小數字。
        在較大的羅馬數字的左邊記上較小的羅馬數字，表示大數字减小數字。
        左减的数字有限制，仅限于I、X、C。比如45不可以写成VL，只能是XLV
        但是，左減時不可跨越一個位數。比如，99不可以用IC（100 - 1）表示，而是用XCIX（[100 - 10] + [10 - 1]）表示。（等同於阿拉伯數字每位數字分別表示。）
        左減數字必須為一位，比如8寫成VIII，而非IIX。
        右加數字不可連續超過三位，比如14寫成XIV，而非XIIII。（見下方“數碼限制”一項。）
        加線乘千：
        在羅馬數字的上方加上一條橫線或者加上下標的Ⅿ，表示將這個數乘以1000，即是原數的1000倍。
        同理，如果上方有兩條橫線，即是原數的1000000（1000^{2}）倍。
        數碼限制：
        同一數碼最多只能出現三次，如40不可表示為XXXX，而要表示為XL。
        例外：由於IV是古羅馬神話主神朱庇特（即IVPITER，古羅馬字母裡沒有J和U）的首字，因此有時用IIII代替Ⅳ。*/
public class RomanToInt {
    public static int romanToInt(String s) {
        int nums[]=new int[s.length()];
        for(int i=0;i<s.length();i++){
            switch (s.charAt(i)){
                case 'M':
                    nums[i]=1000;
                    break;
                case 'D':
                    nums[i]=500;
                    break;
                case 'C':
                    nums[i]=100;
                    break;
                case 'L':
                    nums[i]=50;
                    break;
                case 'X' :
                    nums[i]=10;
                    break;
                case 'V':
                    nums[i]=5;
                    break;
                case 'I':
                    nums[i]=1;
                    break;
            }
        }
        int sum=0;
        for(int i=0;i<nums.length-1;i++){
            if(nums[i]<nums[i+1])
                sum-=nums[i];
            else
                sum+=nums[i];
        }
        return sum+nums[nums.length-1];
    }
    public static void main(String[] args) {
        System.out.println(romanToInt("333"));
    }
}
